package day20.enumerate;

/**
 * 枚举类型测试类
 * 该类用于演示Java中枚举类型的基本用法和特性
 * 包括枚举的定义、使用以及枚举类型的一些常用方法
 */
public class EnumTest {
    /**
     * 程序入口点
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        // 测试基本枚举类型
        testBasicEnum();
        
        // 测试带有构造函数和方法的枚举
        testAdvancedEnum();
    }
    
    /**
     * 测试基本枚举类型的使用
     */
    public static void testBasicEnum() {
        System.out.println("=== 基本枚举类型测试 ===");
        
        // 定义一个星期枚举变量
        Weekday today = Weekday.MONDAY;
        System.out.println("今天是: " + today);
        System.out.println("today.name(): " + today.name());
        System.out.println("today.ordinal(): " + today.ordinal());
        
        // 遍历所有枚举值
        System.out.println("所有星期值:");
        for (Weekday day : Weekday.values()) {
            System.out.println("  " + day + " (" + day.ordinal() + ")");
        }
        
        // 枚举比较
        Weekday anotherDay = Weekday.FRIDAY;
        System.out.println("anotherDay == Weekday.FRIDAY: " + (anotherDay == Weekday.FRIDAY));
        System.out.println("today.compareTo(anotherDay): " + today.compareTo(anotherDay));
    }
    
    /**
     * 测试带有字段、构造函数和方法的枚举类型
     */
    public static void testAdvancedEnum() {
        System.out.println("\n=== 高级枚举类型测试 ===");
        
        // 使用颜色枚举
        Color red = Color.RED;
        System.out.println("颜色: " + red);
        System.out.println("RGB值: " + red.getRgb());
        System.out.println("描述: " + red.getDescription());
        
        // 遍历所有颜色
        System.out.println("所有颜色信息:");
        for (Color color : Color.values()) {
            System.out.println("  " + color + " - RGB: " + color.getRgb() + 
                             ", 描述: " + color.getDescription());
        }
        
        // 根据字符串获取枚举值
        Color blue = Color.valueOf("BLUE");
        System.out.println("通过valueof获取的颜色: " + blue);
    }
}

/**
 * 基本枚举类型 - 表示星期几
 */
enum Weekday {
    // 枚举常量列表
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

/**
 * 高级枚举类型 - 表示颜色
 * 包含字段、构造函数和方法
 */
enum Color {
    // 枚举常量，每个常量都调用构造函数
    RED(255, 0, 0, "红色"),
    GREEN(0, 255, 0, "绿色"),
    BLUE(0, 0, 255, "蓝色"),
    YELLOW(255, 255, 0, "黄色"),
    WHITE(255, 255, 255, "白色"),
    BLACK(0, 0, 0, "黑色");
    
    // 枚举的私有字段
    private int r, g, b;
    private String description;
    
    /**
     * 枚举的构造函数
     * @param r 红色分量
     * @param g 绿色分量
     * @param b 蓝色分量
     * @param description 颜色描述
     */
    private Color(int r, int g, int b, String description) {
        this.r = r;
        this.g = g;
        this.b = b;
        this.description = description;
    }
    
    /**
     * 获取RGB颜色值字符串
     * @return RGB格式的字符串表示
     */
    public String getRgb() {
        return "(" + r + "," + g + "," + b + ")";
    }
    
    /**
     * 获取颜色描述
     * @return 颜色描述字符串
     */
    public String getDescription() {
        return description;
    }
}